package com.jd.tuning.jvm.lock.syn;

/**
 * 逃逸
 */
public class SynchronizedTest4 {

    //object2 作用被放大了，发生了逃逸，多个线程访问会有线程安全问题
    private Object object2=null;


    public  void someMethod2() {
        object2=this.someMethod();
    }


    /**
     *  synchronized 作用于局部变量
     *  什么情况会有线程安全问题
     *       * 1、存在共享数据
     *      * 2、多个线程同时操作共享数据
     *   object局部变量，不存在共享数据，多个线程someMethod执行方法不存在线程安全
     *   JDK通过逃逸分析，检测，自动消除锁
     *   逃逸分析：分析变量能否逃出它的作用域
     */
    private  Object someMethod() {
        Object object=new Object();
        //object 局部变量 ，作用域，这个方法，方法执行完就没了，object不可逃逸
        synchronized (object){
            System.out.println(object);
            return object;
        }
    }


}
